// 请说出下列代码最终的结果，并解释为什么
var a = 10
var obj = {
  a: 20,
  fn() {
    setTimeout(() => {
      console.log(this.a)
    })
  }
}

obj.fn()

// 结果
// 20

/**
 * 解析
 *
 * 执行obj.fn()，fn 函数内部的 this 指向 obj
 *
 * 执行函数体内的延时器，延时器传递一个箭头回调函数，箭头函数的this指向定义该箭头函数时其父级的this，也就是fn 的 this，所以延时器箭头函数的 this 指向 obj
 *
 * 计时结束后，执行console.log(this.a)，由于箭头函数的 this 指向obj，所以打印 obj.a = 20
 */